From 67ce0b590037e9259041e84ce5f1a4d422ca9f13 Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild2.aw" Date: Sun, 14 Jan 2007 14:58:51 -0700 Subject: [PATCH] [IA64] Fix multicall hypercall Signed-off-by: Anthony Xu --- xen/arch/ia64/linux-xen/entry.S | 9 +++++++++ xen/include/asm-ia64/multicall.h | 12 ++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/xen/arch/ia64/linux-xen/entry.S b/xen/arch/ia64/linux-xen/entry.S index cb0e89cdd9..0f6aaf80d7 100644 --- a/xen/arch/ia64/linux-xen/entry.S +++ b/xen/arch/ia64/linux-xen/entry.S @@ -1472,6 +1472,15 @@ GLOBAL_ENTRY(unw_init_running) END(unw_init_running) #ifdef XEN +GLOBAL_ENTRY(ia64_do_multicall_call) + movl r2=ia64_hypercall_table;; + shladd r2=r38,3,r2;; + ld8 r2=[r2];; + mov b6=r2 + br.sptk.many b6;; +END(ia64_do_multicall_call) + + .rodata .align 8 .globl ia64_hypercall_table diff --git a/xen/include/asm-ia64/multicall.h b/xen/include/asm-ia64/multicall.h index 15b825bbf0..5002382359 100644 --- a/xen/include/asm-ia64/multicall.h +++ b/xen/include/asm-ia64/multicall.h @@ -4,26 +4,26 @@ #include #include -typedef unsigned long (*hypercall_t)( +extern unsigned long ia64_do_multicall_call( unsigned long arg0, unsigned long arg1, unsigned long arg2, unsigned long arg3, unsigned long arg4, - unsigned long arg5); - -extern const hypercall_t ia64_hypercall_table[]; + unsigned long arg5, + unsigned long op); static inline void do_multicall_call(multicall_entry_t *call) { if (call->op < NR_hypercalls) - call->result = (*ia64_hypercall_table[call->op])( + call->result = ia64_do_multicall_call( call->args[0], call->args[1], call->args[2], call->args[3], call->args[4], - call->args[5]); + call->args[5], + call->op); else call->result = -ENOSYS; } -- 2.30.2